package com.zf.common.json.config;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;

import java.io.IOException;
import java.util.Objects;


/**
 * 自定义Json序列化器:
 * 处理long类型的序列化。
 * <pre>
 * {@code
 * 使用方式：
 * 1、在 指定的属性上使用 @JsonSerialize(using = MyLongSerializer.class); （推荐使用这种方法，如果是其他框架中的类，则无法使用，推荐自定义对应的类的序列化器）
 * 2、或者在 Jackson 的 ObjectMapper 的配置类中全局配置(一般不):
 *      builder.serializerByType(Long.class, MyLongSerializer.instance);
 *      或
 *      module.addSerializer(Long.class, MyLongSerializer.instance);
 * }
 * </pre>
 */
public class MyLongSerializer extends JsonSerializer<Long> {

    public static final MyLongSerializer instance = new MyLongSerializer();


    @Override
    public void serialize(Long value, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        // 对指定的 Long属性序列化为数字，其他类中的Long属性按照全局配置序化
        if (Objects.nonNull(value)) {
            jsonGenerator.writeNumber(value);
        } else {
            jsonGenerator.writeNull();
        }
    }
}